home *** CD-ROM | disk | FTP | other *** search
- ;
- ;#%a %s -ot:%f.o -iai: -iai:ss -q100
- ;#%l FROM lib:segsplit.o t:%f.o TO %f LIBRARY lib:sslib.lib lib:amiga.lib
- ;#delete t:%f.o
- ;
- ;
- ; ### DigiClock by JM & TM v 1.51 ###
- ;
- ; - Created 880612 by JM & TM -
- ;
- ;
- ; Program written for the 'C' Magazine. Segment drawing by TM.
- ; Code is not very beautiful but we wanted to keep it as short as
- ; possible.
- ;
- ; Bugs: None alive.
- ;
- ;
- ; Edited:
- ;
- ; - 880612 by JM,TM -> v0.50 - Works.
- ; - 880613 by JM -> v1.00 - Code compressed.
- ; - 880613 by JM -> v1.10 - Close button added; code compressed.
- ; - 880613 by JM,TM -> v1.40 - Code still compressed. Length was 952
- ; bytes but was then cut down to 816 bytes.
- ; - 880725 by JM -> v1.41 - IDCMP corrected. CLOSEWINDOW must be
- ; checked with CMP.L!
- ; - 881106 by JM -> v1.50 - Re-run enabled (doesn't modify itself)
- ; - 890312 by JM -> v1.51 - Short branches, A68k compatibility
- ;
- ;
-
-
-
- xref _LVOOpenLibrary
- xref _LVOCloseLibrary
- xref _LVOAllocMem
- xref _LVOFreeMem
- xref _LVODisable
- xref _LVOEnable
- xref _LVOWait
- xref _LVOGetMsg
- xref _LVOReplyMsg
-
- xref _LVOExecute
- xref _LVOOpen
- xref _LVOClose
- xref _LVOOutput
- xref _LVORead
- xref _LVOWrite
- xref _LVODelay
- xref _LVODateStamp
-
- xref _LVOMove
- xref _LVODraw
- xref _LVOText
- xref _LVOSetAPen
- xref _LVOSetBPen
- xref _LVOSetDrMd
- xref _LVOSetRast
- xref _LVOLoadRGB4
- xref _LVOVBeamPos
-
- xref _LVOScreenToFront
- xref _LVOScreenToBack
- xref _LVOOpenScreen
- xref _LVOCloseScreen
- xref _LVOOpenWindow
- xref _LVOCloseWindow
- xref _LVOMoveScreen
- xref _LVOOpenFont
- xref _LVOCloseFont
- xref _LVOOpenDiskFont
- xref _LVORectFill
-
- xdef main
-
- include "JMPLibs.i"
- include "intuition.i"
-
- BITDEF MEM,PUBLIC,0
- BITDEF MEM,CHIP,1
- BITDEF MEM,FAST,2
- BITDEF MEM,CLEAR,16
- BITDEF MEM,LARGEST,17
-
- LF equ 10
-
-
- tool_dclock
- main openlib Dos,cleanup_dos open Dos library
- openlib Gfx,cleanup_gfx
- openlib Intuition,cleanup_int
-
- clr.l oldtime
-
- lea ClWindow(pc),a0
- lib Intuition,OpenWindow
- move.l d0,d6 window ptr
- beq cleanup
- move.l d0,a0
- move.l wd_RPort(a0),a5 rastport
-
- moveq.l #2,d0 Fill background
- move.l a5,a1
- lib Gfx,SetAPen
- move.l a5,a1
- moveq.l #2,d0
- moveq.l #10,d1
- move.l #311,d2
- moveq.l #77,d3
- flib Gfx,RectFill
-
- Colon moveq.l #2,d0 Toggle colon color
- bchg #0,col_col
- beq.s Colon_off
- addq.l #1,d0
- Colon_off move.l a5,a1 Set color black/orange
- lib Gfx,SetAPen
- move.l a5,a1 Draw colon (upper dot)
- move.l #152,d0
- moveq.l #30,d1
- move.l d0,d2
- addq.w #8,d2
- moveq.l #34,d3
- flib Gfx,RectFill
-
- move.l a5,a1 Draw colon (lower dot)
- move.l #152,d0
- moveq.l #52,d1
- moveq.l #56,d3
- flib Gfx,RectFill
-
- Main lea TimeBuf(pc),a0 read time
- move.l a0,d1
- lib Dos,DateStamp
-
- move.l TimeBuf+4(pc),d2
- cmp.w oldtime(pc),d2
- beq.s Sleep
- move.w d2,oldtime
- divu.w #60,d2 convert to hours/minutes
- move.l d2,d3 save minutes
- moveq.l #-68,d0 reset x-coord
- bsr draw2
- swap d3
- move.l d3,d2
- bsr.s draw2
-
- Sleep moveq.l #24,d4
- WaitTicks moveq.l #1,d1 Sleep for a while
- lib Dos,Delay
- move.l d6,a0 windowptr
- move.l wd_UserPort(a0),a4
- move.l a4,a0 port*
- lib Exec,GetMsg Check if a message received
- GetMsgLoop move.l d0,d2 message*
- beq.s Colonize No msg received
- move.l d2,a1 IntuiMessage *
- move.l im_Class(a1),d3 Class
- lib Exec,ReplyMsg
- move.l a4,a0 port
- flib Exec,GetMsg
- tst.l d0
- bne GetMsgLoop
- cmp.l #CLOSEWINDOW,d3
- beq.s cleanup
- Colonize dbf d4,WaitTicks
- bra Colon
-
-
- cleanup move.l d6,d0
- beq.s clean90
- move.l d0,a0
- lib Intuition,CloseWindow
-
- clean90 closl Intuition
- cleanup_int closl Gfx
- cleanup_gfx closl Dos
- cleanup_dos rts
-
-
- draw2 and.l #$ffff,d2
- divu.w #10,d2
- move.b d2,d1 10 hours
- add.w #88,d0 xcoord
- bsr.s drawdigit
- swap d2 get hours
- move.b d2,d1
- add.w #68,d0 inc x
-
- drawdigit push all save registers
- move.l d0,d2 x-coordinate of the digit
- lea digitdata(pc),a0
- ext.w d1
- move.b 0(a0,d1.w),d3 segment data
- lsl.b #1,d3
- moveq.l #6,d4
- lea segment(pc),a2
- drawdigit1 moveq.l #2,d0
- lsl.b #1,d3
- bcc.s drawsegment1
- moveq.l #3,d0
- drawsegment1 move.l a5,a1
- lib Gfx,SetAPen
- moveq.l #3,d7
- drawsegment2 moveq.l #0,d0
- move.l d0,d1
- move.b (a2)+,d0
- bmi.s drawline1
- move.b (a2)+,d1
- add.w d2,d0
- move.l a5,a1
- flib Gfx,Move
- moveq.l #0,d0
- move.l d0,d1
- move.b (a2)+,d0
- move.b (a2)+,d1
- add.w d2,d0
- move.l a5,a1
- flib Gfx,Draw
- drawline1 dbf d7,drawsegment2
- dbf d4,drawdigit1
- pull all restore registers
- rts
-
- segment ; segment coordinates
- dc.b 2,20,45,20,3,21,44,21,4,22,43,22,-1
- ; segment A
- dc.b 47,22,47,41,46,23,46,40,45,24,45,39,44,25,44,38
- ; segment B
- dc.b 47,45,47,65,46,46,46,64,45,47,45,63,44,48,44,62
- ; segment C
- dc.b 2,67,45,67,3,66,44,66,4,65,43,65,-1
- ; segment D
- dc.b 0,45,0,65,1,46,1,64,2,47,2,63,3,48,3,62
- ; segment E
- dc.b 0,22,0,41,1,23,1,40,2,24,2,39,3,25,3,38
- ; segment F
- dc.b 4,42,43,42,2,43,45,43,4,44,43,44,-1
- ; segment G
-
- digitdata dc.b %1111110 ; maaritellaan 7-segmenttinayton
- dc.b %0110000 ; numeroissa palavat segmentit
- dc.b %1101101
- dc.b %1111001
- dc.b %0110011
- dc.b %1011011
- dc.b %1011111
- dc.b %1110000
- dc.b %1111111
- dc.b %1111011
-
-
- cnop 0,4 osoite 4:lla jaolliseksi
-
- TimeBuf dc.l 0
- dc.l 0
- dc.l 0
-
- oldtime dc.l 0
- dc.l 0
- dc.l 0
-
- col_col dc.w 0
-
- ClWindow dc.w 0,0,314,79 upper x,y , x,y-size
- dc.b 2,1 detailpen, blockpen
- dc.l CLOSEWINDOW IDCMPFlags
- dc.l WINDOWDRAG!WINDOWDEPTH!WINDOWCLOSE Flags
- dc.l 0 gadgets
- dc.l 0 checkmark
- dc.l MyWinTitle title
- dc.l 0 screen
- dc.l 0 bitmap
- dc.w 320,256,320,256 min-max size
- dc.w WBENCHSCREEN type
-
- MyWinTitle dc.b 'DigiCLOCK v1.51',0
-
- libnames kirjastojen nimet&osoittimet
-
- end
-
-